import { diskStorage } from 'multer';

import {join, extname} from 'path'
// 配置文件上传功能
export const multerOptions = {
  // 配置文件的存储
  storage: diskStorage({
    // 存储地址 使用multer的diskStorage 设置存放目录 -- 可以查看dist打包目录下的文件位置
    // __dirname 是 Node 的全局变量，指当前执行脚本所在目录
    destination: join(__dirname, '../../uploads'),
    // 存储名称
    filename: (_req, file, callback) => {
      const suffix = extname(file.originalname); // extname 用来获取文件后缀
      const docName = `${new Date().getTime() + suffix}`; // 自定义文件名称
      return callback(null, docName);
    }
  }),
  // 过滤存储的文件
  fileFilter: (_req, file, callback) => {
    // multer 默认使用 latin1 编码解析文件名，而latin1编码不支持中文字符，会出现中文乱码
    // 下面将文件名从latin1编码转为Buffer对象，再用toString('utf-8')将Buffer修仙转化为utf-8编码的字符串
    // utf-8是一种支持多国语言的编码方式，可以保证文件名的中文字符串不会被错误解析

    file.originalname = Buffer.from(file.originalname, 'latin1').toString(
      'utf-8'
    );
    callback(null, true);
  },

  // 限制文件大小
  limits: {
    // 限制大小 - 这里假设为10M
    fileSize: 10 * 1024 * 1024,
    // 限制文件名称的长度 ，这里假设 100字节 bytes
    filedNameSize: 100
  }
};
